package store;

import java.util.Scanner;

/**
 * <p>十字链表/p>
 * <p>弥补了邻接表和逆邻接表只能方便查看出边或入边的缺点</p>
 * <p>不过十字链表的实现可能对初学者来说有些复杂，但实际实现思路与邻接表相同并不困难</p>
 *
 * @author 没天赋
 * @since 2025-03-24
 */
public class OrthogonalList {
    public static void main(String[] args) {
        // 边结点
        class edge {
            // 边的起点，终点，权值
            int in, out, val;
            // 下一个入编，下一个出边
            edge nextIn, nextOut;
        }
        // 顶点结点
        class vertex {
            // 顶点值
            int val;
            // 入边，出边
            edge firstIn, firstOut;
        }
        final int N = 105;
        // 顶点数组
        vertex[] head = new vertex[N];
        Scanner sc = new Scanner(System.in);
        // 顶点数，边数
        int n, m, x, y, z, k;
        n = sc.nextInt();
        m = sc.nextInt();
        k = sc.nextInt();
        for (int i = 0; i < m; i++) {
            // 读取顶点值，边的起点，终点，权值
            x = sc.nextInt();
            y = sc.nextInt();
            z = sc.nextInt();
            // 创建边结点
            edge e = new edge();
            e.in = x;
            e.out = y;
            e.val = z;
            // 需要特判，如果顶点不存在，则创建顶点结点，这是Java和C++的不同的地方（不愧我们Java是最正统的面向对象语言！！！（不是））
            if (head[x] == null) {
                head[x] = new vertex();
            }
            if (head[y] == null) {
                head[y] = new vertex();
            }
            // 可以看出这里就是普通的头插
            e.nextOut = head[x].firstOut;
            e.nextIn = head[y].firstIn;
            head[x].firstOut = e;
            head[y].firstIn = e;
        }
        for (int i = 0; i < k; i++) {
            x = sc.nextInt();
            int ord = sc.nextInt();
            // 我们在这里定义ord==1表示输出入边，ord==2表示输出出边
            if (ord == 1) {
                // 使用指针依次遍历即可
                edge point = head[x].firstIn;
                while (point != null) {
                    System.out.print(point.in + " ");
                    point = point.nextIn;
                }
                // 换个行
                System.out.println();
            } else {
                edge point = head[x].firstOut;
                while (point != null) {
                    System.out.print(point.out + " ");
                    point = point.nextOut;
                }
                System.out.println();
            }
        }
    }
    // 这里不再提供测试数据，直接沿用之前的数据或者自己构造数据都可qwq
}
